在第 27 天,我們將專注於為 Line Bot 增加資料存儲的功能,通過將用戶交互資料保存到資料庫,為未來的資料分析和個性化互動做準備。
選擇資料庫類型:
本次使用 SQLite(適合測試和開發環境):
安裝 SQLite 驅動:
pip install sqlite3
創建資料庫和表:
line_bot.db
的資料庫,並建立一個 user_messages
表來存儲用戶的聊天資料。import sqlite3
# 連接到資料庫(如果不存在則會創建)
conn = sqlite3.connect('line_bot.db')
cursor = conn.cursor()
# 創建 user_messages 表
cursor.execute('''
CREATE TABLE IF NOT EXISTS user_messages (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id TEXT NOT NULL,
message TEXT NOT NULL,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
)
''')
conn.commit()
conn.close()
在接收用戶消息時保存到資料庫:
from linebot import LineBotApi, WebhookHandler
from linebot.models import MessageEvent, TextMessage
import sqlite3
line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('YOUR_CHANNEL_SECRET')
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
user_id = event.source.user_id
user_message = event.message.text
# 將用戶消息存入資料庫
conn = sqlite3.connect('line_bot.db')
cursor = conn.cursor()
cursor.execute('''
INSERT INTO user_messages (user_id, message)
VALUES (?, ?)
''', (user_id, user_message))
conn.commit()
conn.close()
# 回覆用戶
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text="您的消息已收到!")
)
查看存儲的資料:
sqlite3 line_bot.db
user_messages
表中的資料:SELECT * FROM user_messages;
錯誤處理:
try:
conn = sqlite3.connect('line_bot.db')
cursor = conn.cursor()
cursor.execute('''
INSERT INTO user_messages (user_id, message)
VALUES (?, ?)
''', (user_id, user_message))
conn.commit()
except sqlite3.Error as e:
print(f"An error occurred: {e}")
finally:
conn.close()
優化資料庫連接: